package GPSChallenge.vehiculo;

import GPSChallenge.LimitesDelMapa;
import GPSChallenge.movimiento.ContadorDeMovimientos;
import GPSChallenge.movimiento.Direccion;
import GPSChallenge.movimiento.Movimiento;
import GPSChallenge.movimiento.Posicion;

public class ObjetoMovible {
	  
    private Posicion posicion;
    private Movimiento movimiento;
    
    public ObjetoMovible(Posicion posicion) {
    	
        this.posicion = posicion;
        this.movimiento = new Movimiento();
    }
    
    public void establecerDireccion(Direccion nuevaDireccion){
    	
    	this.movimiento.establecerDireccion(nuevaDireccion);
    }
    
    public Posicion obtenerPosicion() {
    	
        return this.posicion;
    }
    
    public boolean puedeAvanzar() {
    	
    	Posicion siguientePosicion = this.movimiento.calcularMovimiento(this.posicion);
		return (LimitesDelMapa.obtenerInstancia().estaDentroDeLosLimitesDelMapaLaPosicion(siguientePosicion));
    }
    
    public void avanzar(){
    	
    	this.posicion = this.movimiento.calcularMovimiento(this.posicion);
    	ContadorDeMovimientos.obtenerInstancia().sumarMovimientos(1);
    }
    
	
	public void actualizarMovimiento(){
		
		this.movimiento.actualizarMovimiento();
	}

	public void retroceder() {
		
		this.actualizarMovimiento();
		this.avanzar();
	}

}
